# -*- coding: utf-8 -*-
# @Time    : 22 1月 2025 1:17 下午
# @Author  : codervibe
# @File    : 你可以获得的最大硬币数目.py
# @Project : pythonBasics
"""
有 3n 堆数目不一的硬币，你和你的朋友们打算按以下方式分硬币：

每一轮中，你将会选出 任意 3 堆硬币（不一定连续）。
Alice 将会取走硬币数量最多的那一堆。
你将会取走硬币数量第二多的那一堆。
Bob 将会取走最后一堆。
重复这个过程，直到没有更多硬币。
给你一个整数数组 piles ，其中 piles[i] 是第 i 堆中硬币的数目。

返回你可以获得的最大硬币数目。
"""
from typing import List


class Solution:
    """
    本类提供了一个解决方案来计算从一堆硬币中能获取的最大硬币数。
    硬币堆中的每个元素代表一个硬币的值。
    """

    def maxCoins(self, piles: List[int]) -> int:
        """
        计算从硬币堆中能获取的最大硬币数。

        参数:
        piles (List[int]): 一个整数列表，每个元素代表一个硬币的值。

        返回:
        int: 从硬币堆中能获取的最大硬币数。

        方法通过首先对硬币堆进行排序，然后选择特定的硬币来实现最大化收益。
        """
        # 对硬币堆进行排序，以便能够选择最大值
        piles.sort()
        # 通过切片操作选择硬币堆中价值较高的硬币，然后计算总和
        return sum(piles[len(piles)//3::2])
